const { NodeMediaServer } = require('./index')

const config = {
    rtmp: {
        port: 1935,
        chunk_size: 600000,
        gop_cache: false,
        ping: 60,
        ping_timeout: 30,
    },
    http: {
        port: 8000,
        webroot: './public',
        mediaroot: './media',
        allow_origin: '*',
    },
    https: {
        port: 8443,
        key: './privatekey.pem',
        cert: './certificate.pem',
    },
    auth: {
        api: true,
        api_user: 'admin',
        api_pass: 'admin',
        play: false,
        publish: false,
        secret: 'nodemedia2017privatekey',
    },
    trans: {
        ffmpeg: '/usr/bin/ffmpeg',
        // ffmpeg: 'C:\\ffmpeg\\bin\\ffmpeg.exe',
        tasks: [{
                app: 'live',
                ac: 'aac',
                mp4: true,
                mp4Flags: '[movflags=faststart]',
            },
            {
                app: 'live',
                ac: 'copy',
                hls: true,
                hlsFlags: '[hls_time=2:hls_list_size=3:hls_flags=delete_segments]',
                dash: true,
                dashFlags: '[f=dash:window_size=3:extra_window_size=5]',
            },
        ],
    },
    relay: {
        ffmpeg: '/usr/bin/ffmpeg',
        tasks: [{
                app: 'live',
                mode: 'pull',
                edge: 'rtmp://192.168.0.20',
            },
            {
                app: 'live',
                mode: 'push',
                edge: 'rtmp://192.168.0.10',
            },
        ],
    },
}

let nms = new NodeMediaServer(config)
nms.run()

nms.on('preConnect', (id, args) => {
    console.log('[NodeEvent on preConnect]', `id=${id} args=${JSON.stringify(args)}`)
        // let session = nms.getSession(id);
        // session.reject();
})

nms.on('postConnect', (id, args) => {
    console.log('[NodeEvent on postConnect]', `id=${id} args=${JSON.stringify(args)}`)
})

nms.on('doneConnect', (id, args) => {
    console.log('[NodeEvent on doneConnect]', `id=${id} args=${JSON.stringify(args)}`)
})

nms.on('prePublish', (id, StreamPath, args) => {
    console.log('[NodeEvent on prePublish]', `id=${id} StreamPath=${StreamPath} args=${JSON.stringify(args)}`)
        // let session = nms.getSession(id);
        // session.reject();
})

nms.on('postPublish', (id, StreamPath, args) => {
    console.log('[NodeEvent on postPublish]', `id=${id} StreamPath=${StreamPath} args=${JSON.stringify(args)}`)
})

nms.on('donePublish', (id, StreamPath, args) => {
    console.log('[NodeEvent on donePublish]', `id=${id} StreamPath=${StreamPath} args=${JSON.stringify(args)}`)
})

nms.on('prePlay', (id, StreamPath, args) => {
    console.log('[NodeEvent on prePlay]', `id=${id} StreamPath=${StreamPath} args=${JSON.stringify(args)}`)
        // let session = nms.getSession(id);
        // session.reject();
})

nms.on('postPlay', (id, StreamPath, args) => {
    console.log('[NodeEvent on postPlay]', `id=${id} StreamPath=${StreamPath} args=${JSON.stringify(args)}`)
})

nms.on('donePlay', (id, StreamPath, args) => {
    console.log('[NodeEvent on donePlay]', `id=${id} StreamPath=${StreamPath} args=${JSON.stringify(args)}`)
})